# Instale os pacotes necessários, se ainda não estiverem instalados
install.packages("ggplot2")
install.packages("gridExtra")

# Carregar os pacotes
library(ggplot2)
library(gridExtra)

# Definir uma paleta de cores extensa para cobrir todos os gráficos
colors <- c("#5A3E88", "#287D6A", "#69AC65", "#A3C75A", "#8FCF3C", "#B7DF1B", "#DAE114", "#DDE42B", "#E8ED72", "#F7F9D0")

# Função para ordenar os dados por frequência
order_data <- function(df) {
  df$Categoria <- factor(df$Categoria, levels = df$Categoria[order(df$Frequencia, decreasing = TRUE)])
  return(df)
}

# Ajustes de tema para evitar sobreposição
theme_custom <- theme(
  axis.text.x = element_text(angle = 35, hjust = 1, size = 8),
  plot.title = element_text(hjust = 0.5, size = 14),
  plot.margin = margin(10, 10, 10, 10)
)

# Função para criar os gráficos com números nas barras
create_plot <- function(data, title, colors) {
  max_value <- max(data$Frequencia) * 1.2  # Aumentar o limite superior do eixo Y em 10%
  ggplot(data, aes(x=Categoria, y=Frequencia, fill=Categoria)) + 
    geom_bar(stat="identity") + 
    geom_text(aes(label=Frequencia), vjust=-0.5, size=3.5) + 
    scale_fill_manual(values=colors) +
    ylim(0, max_value) +  # Definir o limite superior do eixo Y
    labs(title=title, x=NULL, y=NULL) +
    theme_custom + 
    theme(legend.position = "none")
}

# Dados e criação dos gráficos
data1 <- data.frame(
  Categoria = c("A - Empírico", "B - Teórico", "Teórico e Empírico"),
  Frequencia = c(20, 5, 2)
)
data1 <- order_data(data1)
plot1 <- create_plot(data1, "TIPO DE ESTUDO", colors[1:3])

#
data2 <- data.frame(
  Categoria = c("A - Quantitativo", "B - Qualitativo", "Quali e Quanti"),
  Frequencia = c(20, 4, 3)
)
data2 <- order_data(data2)
plot2 <- create_plot(data2, "ABORDAGEM DE TIPO", colors[1:3])

#

data3 <- data.frame(
  Categoria = c("C - Justiça nos resultados", "A - Viés do conjunto de dados", "D - Tradeoffs Justiça x Performance" , "B - Viés de raça/etnia"),
  Frequencia = c(13, 9, 4, 1)
)
data3 <- order_data(data3)
plot3 <- create_plot(data3, "TÓPICO DE PESQUISA", colors[1:4])

#

data4 <- data.frame(
  Categoria = c("C - Implicit discrimination", "A - Profit maximization", "D - Statistical Model of sample adjustments", "B - Taste-based", "E - Information asymmetry"),
  Frequencia = c(17, 4, 4, 1, 1)
)
data4 <- order_data(data4)
plot4 <- create_plot(data4, "TEORIA BACKGROUND", colors[1:5])

#

data5 <- data.frame(
  Categoria = c("A - Público", "B - Privado", "Público e Privado"),
  Frequencia = c(19, 3, 1)
)
data5 <- order_data(data5)
plot5 <- create_plot(data5, "ACESSO AOS DADOS", colors[1:3])

#

data6 <- data.frame(
  Categoria = c("A - Acadêmico", "C - Empresarial", "D - Governamental", "B - Sintético", "Acadêmico e Empresarial"),
  Frequencia = c(17, 2, 2, 1, 1)
)
data6 <- order_data(data6)
plot6 <- create_plot(data6, "ORIGEM DOS DADOS", colors[1:5])

#

data7 <- data.frame(
  Categoria = c("C - Mix de Crédito", "B - Cartão de Crédito", "A - Hipoteca"),
  Frequencia = c(13, 4, 2)
)
data7 <- order_data(data7)
plot7 <- create_plot(data7, "EMPRÉSTIMO", colors[1:3])

#

data8 <- data.frame(
  Categoria = c("B - Generation", "C - Fair representation", "A - Relabeling", "D - Constraint optimization", "F - Calibration", "G - Thresholding"),
  Frequencia = c(6, 6, 4, 4, 3, 2)
)
data8 <- order_data(data8)
plot8 <- create_plot(data8, "MÉTODO DE MITIGAÇÃO DO VIÉS", colors[1:6])

#

data9 <- data.frame(
  Categoria = c("A - Pré-Processamento", "C - Pós-Processamento", "B - Em Processamento", "Ambas"),
  Frequencia = c(17, 5, 3, 2)
)
data9 <- order_data(data9)
plot9 <- create_plot(data9, "ABORDAGEM", colors[1:4])

#

data10 <- data.frame(
  Categoria = c("A - Gênero", "B - Raça", "D - Idade", "C - Etnia"),
  Frequencia = c(13, 7, 4, 3)
)
data10 <- order_data(data10)
plot10 <- create_plot(data10, "ATRIBUTO COM VIÉS", colors[1:4])

#

data11 <- data.frame(
  Categoria = c("A - Statistical Parity", "G - Fairness Through Awareness", "C - Equal Opportunity", "B - Equalized Odds", "F - Fairness Through Unawareness"),
  Frequencia = c(12, 8, 7, 6, 2)
)
data11 <- order_data(data11)
plot11 <- create_plot(data11, "MÉTRICAS DE AVALIAÇÃO JUSTIÇA", colors[1:5])

#

data12 <- data.frame(
  Categoria = c("A - Accuracy", "D - AUC", "B - F1-Score", "F - Kolmogorov – Smirnov", "J - Recall", "C - G-mean", "G - Gini", "H - Erro quadrático médio", "I - Precision at Position k (P@k)", "K - Balanced Accuracy Score (BAcc)"),
  Frequencia = c(10, 8, 7, 2, 2, 1, 1, 1, 1, 1)
)
data12 <- order_data(data12)
plot12 <- create_plot(data12, "MÉTRICAS DE AVALIAÇÃO DESEMPENHO", colors[1:10])

# Criação da grade de gráficos
grid <- grid.arrange(
  plot1, plot2, plot3, plot4, plot5, 
  plot6, plot7, plot8, plot9, plot10, 
  plot11, plot12, 
  ncol = 3, nrow = 4
)

# Salvar a grade como imagem
ggsave("grid_of_plots_with_values_adjusted.png", grid, width = 16, height = 12)
